#ifndef HTTP_CLIENT_H
#define HTTP_CLIENT_H
#include <cjson/cJSON.h>
#include <curl/curl.h>

// 动画枚举类型
enum http_client_req_method {
    get,// get请求
    post,// post请求
};

/**
 * 纯URL链接请求
 * @param url	URL链接
 * @return cJSON请求结果
 */
cJSON *get_query(const char *const url);

// ❌编译报错🎃：声明与 "cJSON *http_get_req(const char *const url, struct curl_slist *headers)" (已声明 所在行数:20) 不兼容C/C++(147)
// ✅原因分析：方法的参数类型为curl_slist，需要通过文件引用指令#include
// 把头文件（.h）即<curl/curl.h>的函数声明、宏定义、结构体等内容拷贝进来
// ✅解决办法：curl_slist 是 libcurl 库中用于构建 HTTP Header 列表的结构体，
// 它的定义在 <curl/curl.h> 里，因此需要#include <curl/curl.h>
/**
 * get请求
 * @param url	api地址
 * @param headers	请求头（HTTP Headers）
 *
    struct curl_slist *headers = NULL;
    headers = curl_slist_append(headers, "User-Agent: pan.baidu.com");

 * @param useragent	HTTP 请求头里的User-Agent 字段，告诉服务器：“我是谁（浏览器 / 客户端 / 应用）”。
 * @return cJSON请求结果
 */
cJSON *http_get_req(const char *const url, struct curl_slist *headers, const char *const useragent);

/**
 * post请求
 * @param url	api地址
 * @param headers	请求头（HTTP Headers）
 * @param post_fields	POST 表单数据
 * @param useragent	HTTP 请求头里的User-Agent 字段，告诉服务器：“我是谁（浏览器 / 客户端 / 应用）”。
 * @return cJSON请求结果
 */
cJSON * http_post_req(const char *const url, struct curl_slist *headers, const char *post_fields, const char *const useragent);

/**
 * upload file上传文件
 * @param url	api地址
 * @param file_name 上传文件字段名称："file"或者"image"
 * @param file_path 文件路径："./assets/images/cymbal/cymbal_00.jpg"; ✅./assets表示根目录的assets文件夹
 * @param useragent	HTTP 请求头里的User-Agent 字段，告诉服务器：“我是谁（浏览器 / 客户端 / 应用）”。
 *
 * @return _Bool 上传文件结果
 */
cJSON * http_post_upload_file_req(const char *const url, char *file_name, char *file_path, const char *const useragent);

#endif // HTTP_CLIENT_H
